package com.xfc.message;

import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

/**
 * 通知消息
 * @author lcj
 */
@Slf4j
@Component
public class NoticeMessage {

    /**短信模板*/
    @Value("${wx.templateId.b}")
    private String temb;

    /**短信模板*/
    @Value("${wx.templateId.c}")
    private String temc;

    /**短信模板*/
    @Value("${wx.templateId.a}")
    private String tema;

    /**短信模板*/
    @Value("${wx.templateId.d}")
    private String temd;

    /**短信模板*/
    @Value("${wx.templateId.e}")
    private String teme;

    /**短信模板*/
    @Value("${wx.templateId.f}")
    private String temf;

    /**短信模板*/
    @Value("${wx.templateId.g}")
    private String temg;

    /**短信模板*/
    @Value("${wx.templateId.h}")
    private String temh;

    /**短信模板*/
    @Value("${wx.templateId.i}")
    private String temi;

    @Autowired
    private WxMpService wxMpService;


    /**
     *  试听课老师确定通知
     * @param openId 微信标识
     * @param name 学生姓名
     * @param courseName 课程名称
     * @param timeNumber 课时
     * @param startTime 上课开始时间
     * @param address 上课地址
     */
    @Async
    public void appointmentMessage(String openId,String name,String courseName,String timeNumber,String startTime,String address){
        log.info("试听课老师确定通知模板发送,openid:{}",openId);
        // 发送模板消息接口
        WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
                // 模板id
                .templateId(temb)
                // 模板跳转链接.url("http://81.69.173.26")
                .build();
        // 添加模板数据
        templateMessage.addData(new WxMpTemplateData("first", "亲爱的"+name+"家长，您有新的课程已成功预约，请及时查看。\n", "#173177"))
                .addData(new WxMpTemplateData("keyword1", courseName, "#173177"))
                .addData(new WxMpTemplateData("keyword2", timeNumber, "#173177"))
                .addData(new WxMpTemplateData("keyword3", startTime, "#173177"))
                .addData(new WxMpTemplateData("keyword4", address, "#173177"))
                .addData(new WxMpTemplateData("remark", "\n如有疑问，可拨打热线51219359询问，谢谢！", "#173177"))
                .setToUser(openId);
        // 发送模板消息
        String msgId = "";
        try {
            msgId  = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
            log.error("模板信息发送成功,{}",msgId);
        } catch (WxErrorException e) {

            e.printStackTrace();
        }
    }

    /**
     *  上课提醒（正式课与试听课）
     * @param openId  微信标识
     * @param courseName 课程名称
     * @param address 上课地址
     * @param teacherName 老师名称
     * @param startTime 上课时间
     */
    @Async
    public void courseMessage(String openId,String courseName,String address,String teacherName,String startTime){
        log.info("上课提醒（正式课与试听课）模板发送,openid:{}", openId);
        // 发送模板消息接口
        WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
                // 模板id
                .templateId(temc)
                // 模板跳转链接.url("http://81.69.173.26")
                .build();
        // 添加模板数据
        templateMessage.addData(new WxMpTemplateData("first", "您有新的课程上课提醒，请及时查看并与当天前往上课地点上课。\n", "#173177"))
                .addData(new WxMpTemplateData("keyword1", courseName, "#173177"))
                .addData(new WxMpTemplateData("keyword2", address, "#173177"))
                .addData(new WxMpTemplateData("keyword3",  teacherName, "#173177"))
                .addData(new WxMpTemplateData("keyword4", startTime, "#173177"))
                .addData(new WxMpTemplateData("remark", "\n如有疑问，可拨打热线51219359询问，谢谢！", "#173177"));

        // 发送模板消息
        templateMessage.setToUser(openId);
        String msgId  = "";
        try {
            msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
        } catch (WxErrorException e) {
            log.error("模板信息发送失败,失败原因{}",msgId);
            e.printStackTrace();
        }
        log.error("模板信息发送成功,{}",msgId);


    }


    /**
     * 课程取消通知
     * @param openId 微信标识
     * @param courseName 课程名称
     * @param startTime 上课时间
     */
    @Async
    public void courseCanel(List<String> openId,String courseName,String startTime){
        log.info("课程取消通知模板发送,openid:{}", openId);
        // 发送模板消息接口
        WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
                // 模板id
                .templateId(temd)
                // 模板跳转链接.url("http://81.69.173.26")
                .build();
        // 添加模板数据
        templateMessage.addData(new WxMpTemplateData("first", "亲爱的张三家长，非常抱歉，您有一门课程已临时取消上课，详情如下：\n", "#173177"))
                .addData(new WxMpTemplateData("keyword1", courseName, "#173177"))
                .addData(new WxMpTemplateData("keyword2", startTime, "#173177"))
                .addData(new WxMpTemplateData("remark", "\n如有疑问，可拨打热线51219359询问，谢谢！", "#173177"));

        // 发送模板消息
        openId.forEach(l->{
            templateMessage.setToUser(l);
            String msgId  = "";
            try {
                msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
            } catch (WxErrorException e) {
                log.error("模板信息发送失败,失败原因{}",msgId);
                e.printStackTrace();
            }
            log.error("模板信息发送成功,{}",msgId);
        });
    }

    /**
     * 课程上课时间调整微信通知
     * @param list 微信标识/学生名称
     * @param courseName 课程名称
     * @param startTime 原上课时间
     * @param newStartTime 新上课时间
     */
    @Async
    public void CourseChanage(List<Map<String,String>> list, String courseName, String startTime, String newStartTime){
        log.info("课程上课时间调整微信通知模板发送,openid:{}", list);
        // 发送模板消息接口
        WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
                // 模板id
                .templateId(teme)
                // 模板跳转链接.url("http://81.69.173.26")
                .build();
        // 添加模板数据
        templateMessage.addData(new WxMpTemplateData("keyword1", startTime, "#173177"))
                .addData(new WxMpTemplateData("keyword2", newStartTime, "#173177"))
                .addData(new WxMpTemplateData("remark", "\n如有疑问，可拨打热线51219359询问，谢谢！", "#173177"));

        // 发送模板消息
        list.forEach(l->{
            templateMessage.setToUser(l.get("openId"));
            templateMessage.addData(new WxMpTemplateData("first", "亲爱的"+l.get("name")+"家长，非常抱歉，您有一门 《"+courseName+"》 课程临时调课，详情如下：\n", "#173177"));
            String msgId  = "";
            try {
                msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
            } catch (WxErrorException e) {
                log.error("模板信息发送失败,失败原因{}",msgId);
                e.printStackTrace();
            }
            log.error("模板信息发送成功,{}",msgId);
        });
    }

    /**
     *  课程签到消课通知
     * @param openId 微信标识
     * @param name 学生姓名
     * @param startTime 开始时间
     * @param courseName 课程名称
     * @param timeNumber  课时
     * @param surplusTime 剩余课时
     */
    @Async
    public void courseDisappear(String openId,String name,String startTime,String courseName,String timeNumber,String surplusTime){

        log.info("课程签到消课通知模板发送,openid:{}",openId);
        // 发送模板消息接口
        WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
                // 模板id
                .templateId(temf)
                // 模板跳转链接.url("http://81.69.173.26")
                .build();
        // 添加模板数据
        templateMessage.addData(new WxMpTemplateData("first", "亲爱的"+name+"家长，您有一条销课通知，详情如下：\n", "#173177"))
                .addData(new WxMpTemplateData("keyword1", name, "#173177"))
                .addData(new WxMpTemplateData("keyword2", startTime, "#173177"))
                .addData(new WxMpTemplateData("keyword3", courseName, "#173177"))
                .addData(new WxMpTemplateData("keyword4", timeNumber+"课时", "#173177"))
                .addData(new WxMpTemplateData("remark", "\n当前课程剩余"+surplusTime+"课时\n如有疑问，可拨打热线51219359询问，谢谢！", "#173177"))
                .setToUser(openId);
        // 发送模板消息
        String msgId = "";
        try {
            msgId  = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
            log.error("模板信息发送成功,{}",msgId);
        } catch (WxErrorException e) {
            e.printStackTrace();
        }

    }

    /**
     *  课堂评价通知
     * @param openId 微信标识
     * @param name 学生姓名
     * @param teacherName 老师姓名
     * @param courseName 课程名称
     */
    @Async
    public void courseEvaluate(String openId,String name,String courseName,String teacherName){
        log.info("课堂评价通知模板发送,openid:{}",openId);
        // 发送模板消息接口
        WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
                // 模板id
                .templateId(temg)
                // 模板跳转链接.url("http://81.69.173.26")
                .build();
        // 添加模板数据
        templateMessage.addData(new WxMpTemplateData("first", "亲爱的"+name+"家长，您的孩子有一条新的课堂评价通知，可点击详情查看\n", "#173177"))
                .addData(new WxMpTemplateData("keyword1", courseName, "#173177"))
                .addData(new WxMpTemplateData("keyword2", teacherName, "#173177"))
                .addData(new WxMpTemplateData("remark", "\n如有疑问，可拨打热线51219359询问，谢谢", "#173177"))
                .setToUser(openId);
        // 发送模板消息
        String msgId = "";
        try {
            msgId  = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
            log.error("模板信息发送成功,{}",msgId);
        } catch (WxErrorException e) {
            e.printStackTrace();
        }
    }


    /**
     * 课程进度提醒
     * @param openId 微信标识
     * @param name 学生姓名
     * @param courseName 课程名称
     * @param courseStatus 课程状态
     * @param progress 课程进度
     * @param courseTimeTotal 总课时
     * @param subCourseTime 已消课时
     */
    @Async
    public void courseProgress(String openId,String name,String courseName,String courseStatus,Integer progress,Integer courseTimeTotal,Integer subCourseTime){

        log.info("课堂评价通知模板发送,openid:{}",openId);
        // 发送模板消息接口
        WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
                // 模板id
                .templateId(temh)
                // 模板跳转链接.url("http://81.69.173.26")
                .build();
        // 添加模板数据
        templateMessage.addData(new WxMpTemplateData("first", "亲爱的"+name+"家长，您的孩子有一条新的课堂评价通知，可点击详情查看\n", "#173177"))
                .addData(new WxMpTemplateData("keyword1", courseName, "#173177"))
                .addData(new WxMpTemplateData("keyword2", courseStatus, "#173177"))
                .addData(new WxMpTemplateData("keyword3", String.valueOf(progress), "#173177"))
                .addData(new WxMpTemplateData("remark", "\n您当前课程总课时"+courseTimeTotal+"，已销课时"+subCourseTime+"。\n如有疑问，可拨打热线51219359询问，谢谢", "#173177"))
                .setToUser(openId);
        // 发送模板消息
        String msgId = "";
        try {
            msgId  = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
            log.error("模板信息发送成功,{}",msgId);
        } catch (WxErrorException e) {
            e.printStackTrace();
        }

    }





}
